/**
 * 身份证号码处理工具函数
 */

/**
 * 验证身份证号码格式
 * @param {string} idNumber 身份证号码
 * @returns {boolean} 是否有效
 */
export function validateIdNumber(idNumber) {
  if (!idNumber) return false
  
  // 基本格式验证
  const idNumberRegex = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
  if (!idNumberRegex.test(idNumber)) {
    return false
  }
  
  // 地区码验证（前6位）
  const areaCode = idNumber.substring(0, 6)
  if (!isValidAreaCode(areaCode)) {
    return false
  }
  
  // 出生日期验证
  const birthDate = idNumber.substring(6, 14)
  if (!isValidBirthDate(birthDate)) {
    return false
  }
  
  // 校验码验证
  if (!isValidCheckCode(idNumber)) {
    return false
  }
  
  return true
}

/**
 * 验证地区码
 * @param {string} areaCode 地区码
 * @returns {boolean} 是否有效
 */
function isValidAreaCode(areaCode) {
  // 这里可以添加具体的地区码验证逻辑
  // 简化处理：检查是否为6位数字
  return /^\d{6}$/.test(areaCode)
}

/**
 * 验证出生日期
 * @param {string} birthDate 出生日期（YYYYMMDD格式）
 * @returns {boolean} 是否有效
 */
function isValidBirthDate(birthDate) {
  const year = parseInt(birthDate.substring(0, 4))
  const month = parseInt(birthDate.substring(4, 6))
  const day = parseInt(birthDate.substring(6, 8))
  
  // 检查年份范围
  if (year < 1900 || year > new Date().getFullYear()) {
    return false
  }
  
  // 检查月份
  if (month < 1 || month > 12) {
    return false
  }
  
  // 检查日期
  const date = new Date(year, month - 1, day)
  if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {
    return false
  }
  
  return true
}

/**
 * 验证校验码
 * @param {string} idNumber 身份证号码
 * @returns {boolean} 是否有效
 */
function isValidCheckCode(idNumber) {
  const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
  const checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
  
  let sum = 0
  for (let i = 0; i < 17; i++) {
    sum += parseInt(idNumber[i]) * weights[i]
  }
  
  const checkCode = checkCodes[sum % 11]
  return checkCode === idNumber[17].toUpperCase()
}

/**
 * 掩码身份证号码
 * @param {string} idNumber 身份证号码
 * @returns {string} 掩码后的身份证号码
 */
export function maskIdNumber(idNumber) {
  if (!idNumber || idNumber.length < 8) return idNumber
  
  const prefix = idNumber.substring(0, 4)
  const suffix = idNumber.substring(idNumber.length - 4)
  return `${prefix}******${suffix}`
}

/**
 * 获取身份证号码中的出生日期
 * @param {string} idNumber 身份证号码
 * @returns {string} 出生日期（YYYY-MM-DD格式）
 */
export function getBirthDateFromId(idNumber) {
  if (!idNumber || idNumber.length < 14) return ''
  
  const year = idNumber.substring(6, 10)
  const month = idNumber.substring(10, 12)
  const day = idNumber.substring(12, 14)
  
  return `${year}-${month}-${day}`
}

/**
 * 获取身份证号码中的性别
 * @param {string} idNumber 身份证号码
 * @returns {string} 性别（男/女）
 */
export function getGenderFromId(idNumber) {
  if (!idNumber || idNumber.length < 17) return ''
  
  const genderCode = parseInt(idNumber.substring(16, 17))
  return genderCode % 2 === 1 ? '男' : '女'
}

/**
 * 获取身份证号码中的年龄
 * @param {string} idNumber 身份证号码
 * @returns {number} 年龄
 */
export function getAgeFromId(idNumber) {
  if (!idNumber || idNumber.length < 14) return 0
  
  const birthDate = getBirthDateFromId(idNumber)
  if (!birthDate) return 0
  
  const birthYear = parseInt(birthDate.substring(0, 4))
  const currentYear = new Date().getFullYear()
  
  return currentYear - birthYear
}
